﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

namespace ShopCD.BusinessLogic
{
    class bl_DanhMuc
    {
        ShopCD.AccessData.AccessData con;
        Form frm;
        DataTable tb;

        /// <summary>
        /// Hàm khởi tạo với tham đối là 1 form
        /// </summary>
        /// <param name="f">Form DanhMuc</param>
        public bl_DanhMuc(ShopCD.GUI.frm_DanhMuc f)
        {
            con = new AccessData.AccessData();
            frm = f;
        }

        /// <summary>
        /// Hàm nạp datatable vào GridView và binding dữ liệu vào textbox
        /// </summary>
        public void Refresh()
        {
            ((DataGridView)frm.Controls["gv_DM"]).DataSource = tb;

            ((TextBox)frm.Controls["tb_MaDM"]).DataBindings.Clear();
            ((TextBox)frm.Controls["tb_TenDM"]).DataBindings.Clear();
            //Binding data các row vào các textbox
            ((TextBox)frm.Controls["tb_MaDM"]).DataBindings.Add("Text", tb, "MaDM");
            ((TextBox)frm.Controls["tb_TenDM"]).DataBindings.Add("Text", tb, "TenDM");
        }

        /// <summary>
        /// Hàm hiển thị dữ liệu trên gridview
        /// </summary>
        /// <param name="MaDM"></param>
        public void Show(string MaDM)
        {
            SqlParameter[] pr = new SqlParameter[1];
            if (MaDM != null)
                pr[0] = new SqlParameter("@MaDM", MaDM);
            else
                pr[0] = new SqlParameter("@MaDM", DBNull.Value);
            
            con.Open();
            //Gọi hàm Execute_sp với 2 tham đối: Tên thủ tục thực hiện, và mảng giá trị tham đối kiểu parameter
            tb = con.Execute_sp("sp_ViewDM", pr);
            con.Close();
            Refresh();
        }

        /// <summary>
        /// Hàm thêm row vào database đồng thời hiển lại lên gridview
        /// </summary>
        public void Add()
        {
            string str_Ma, str_Ten;
            str_Ma = ((TextBox)frm.Controls["tb_MaDM"]).Text;
            str_Ten = ((TextBox)frm.Controls["tb_TenDM"]).Text;
            SqlParameter[] pr = { new SqlParameter("@MaDM", str_Ma), new SqlParameter("@TenDM", str_Ten) };

            con.Open();
            tb = con.Execute_sp("sp_AddDM", pr);
            con.Close();
            Refresh();
        }

        /// <summary>
        /// Hàm xóa row trong database đồng thời hiển thị lại gridview
        /// </summary>
        public void Delete()
        {
            string str_Ma;
            str_Ma = ((TextBox)frm.Controls["tb_MaDM"]).Text;
            SqlParameter[] pr = { new SqlParameter("@MaDM", str_Ma) };
            con.Open();
            tb = con.Execute_sp("sp_DelDM", pr);
            con.Close();
            Refresh();
        }

        /// <summary>
        /// Hàm thay đổi 1 row trong database đồng thời hiển thị lại gridview
        /// </summary>
        public void Edit()
        {
            string str_Ma, str_Ten;
            str_Ma = ((TextBox)frm.Controls["tb_MaDM"]).Text;
            str_Ten = ((TextBox)frm.Controls["tb_TenDM"]).Text;
            SqlParameter[] pr = { new SqlParameter("@MaDM", str_Ma), new SqlParameter("@TenDM", str_Ten) };

            con.Open();
            tb = con.Execute_sp("sp_EditDM", pr);
            con.Close();
            Refresh();
        }

        /// <summary>
        /// Hàm Save lại những thay đổi(Nếu có) của gridview vào database đồng thời hiển thị lại gridview
        /// </summary>
        public void Save()
        {
            ((DataGridView)frm.Controls["gv_DM"]).DataSource = tb;
            con.Open();
            con.Save(ref tb);
            con.Close();
        }
    }
}
